package it.gestionedocumentale.struts.action.download;

import it.gestionedocumentale.model.Documento;
import it.gestionedocumentale.model.Utente;
import it.gestionedocumentale.spring.service.MyServiceFactory;
import it.gestionedocumentale.struts.form.RicercaDocumentoForm;
import it.gestionedocumentale.utility.UtilityDate;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class PrepareListDocumentoAction extends Action {
	
	private static Log log = LogFactory.getLog(Object.class);
	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		Utente utenteSession = (Utente) request.getSession().getAttribute("utenteSession");
		if(utenteSession == null) {
			return mapping.findForward("notInSession");
		}
		Set<Documento> listaDocumento = new HashSet<Documento>();
		
		try {
			if(mapping.getPath().equals("/PrepareListaDocumentoAction")){
				String keySearch = request.getParameter("keySearch");
				listaDocumento = MyServiceFactory.getDocumentoService().simpleSearch(utenteSession, keySearch);
			}else{// path = /PrepareListaDocumentoAvanzataAction
				RicercaDocumentoForm ricercaDocumentoForm = (RicercaDocumentoForm) form;
				Date dataInizio = ricercaDocumentoForm.getDataInizio();
				Date dataFine = ricercaDocumentoForm.getDataFine();
				if(dataInizio!=null && dataFine==null) {
					ricercaDocumentoForm.setDataFine(UtilityDate.addDay(dataInizio, 1));
				}
				if(dataFine != null) {
					ricercaDocumentoForm.setDataFine(UtilityDate.addDay(dataFine, 1));
				}
				listaDocumento = MyServiceFactory.getDocumentoService().advancedSearch(utenteSession, ricercaDocumentoForm);
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return mapping.findForward("error");
		}

		request.setAttribute("listaDocumento", listaDocumento);
		return mapping.findForward("listaDocumento");
	}
}
